/*
 * \file TableAdaptateur.h
 * \brief Fichier o� la classe Table est d�clar�e
 * \autor Thibaut ALGRIN
 * \autor Emmanuel Carr�
 * \date 13 D�cembre 2011
 */

#ifndef TABLEADAPTATEUR_H_
#define TABLEADAPTATEUR_H_

#include "Table.h"

namespace tp3
{
  template<typename TypeCle, typename TypeValeur, typename Hache>
  class TableAdaptateur
  {
  public:
    /*
     * \brief Constructeur de la Classe TableAdaptateur
     * \param unsigned int taille_maximale
     * \fn TableAdaptateur<TypeCle, TypeValeur, Hache>::TableAdaptateur(unsigned int taille_maximale)
     */
    TableAdaptateur(unsigned int taille_maximale);
    /*
     * \brief Méthode permettant d'afficher le contenue dont la cl� est la m�me
     * \param const TypeCle& cle
     * \fn TableAdaptateur<TypeCle, TypeValeur, Hache>::lire(const TypeCle& cle) const
     * \return la valeur de l'element TypeValeur
     */
    TypeValeur lire(const TypeCle& cle) const;
    /*
     * \brief Méthode permettant de savoir si la table n'est pas vide
     * \fn TableAdaptateur<TypeCle, TypeValeur, Hache>::nEstPasPlein() const
     * \return true ou false
     */
    bool nEstPasPlein() const;
    /*
     * \brief Méthode permettant d'ajouter un élément
     * \param const TypeCle& cle
     * \param const TypeValeur& valeur
     * \fn TableAdaptateur<TypeCle, TypeValeur, Hache>::ajouter(const TypeCle& cle, const TypeValeur& valeur)
     * \post throw ErreurDictionnairePlein = si la clé n'existe pas
     */
    void ajouter(const TypeCle& cle, const TypeValeur& valeur);
    /*
     * \brief Méthode permettant de lister tout les éléments
     * \fn TableAdaptateur<TypeCle, TypeValeur, Hache>::listerElements() const
     * \return EnsembleCouples<TypeCle, TypeValeur>
     */
    EnsembleCouples<TypeCle, TypeValeur> listerElements() const;
  private:
    Table<TypeCle, TypeValeur, Hache>   myTable;
    unsigned int m_taille_maximale;
  };
}

#include "TableAdaptateur.inl"

#endif /* TableADAPTATEUR_H_ */
